﻿<?php
/**
\cond
ooooo                        
`888'                        
 888  oo.ooooo.  oooo    ooo 
 888   888' `88b  `88.  .8'  
 888   888   888   `88..8'   
 888   888   888    `888'    
o888o  888bod8P'     .8'     
       888       .o..P'      
      o888o      `Y8P'       
\endcond

\file ipy.php
\brief Fichier principal de la librairie Ipy.
\author 	: 	Loïc Coenen
\date 		:	4/09/2011

Ce fichier inclut les modules Nout et Maat.

\mainpage

Le framework \b Ipy a pour but de faciliter un développement rapide, en fournissant un certain nombre d'outil et 
certaines conventions de codages et d'organisation du projet.

Le coeur du projet Ipy est composé de plusieurs modules : Maat, qui sert au reroutage et à la réecriture 
d'URL (maat.php), Nout, le gestionnaire de plugin (nout.php), <a href="http://www.smarty.net/docsv2/fr/">Smarty</a> qui est le générateur de template, 
et <a href="php.net/PDO">PDO</a> pour la gestion des bases de données. Le framework javascript <a href="http://jquery.com/">Jquery</a> est également fourni 
au sein d'Ipy.

\page arborescence Arborescence et plugins
Une arborescence claire est un plus non négligeable dans la gestion d'un projet, quel que soit sa taille	
C'est pourquoi le framework \b ipy est fourni avec une arborescence par défaut, dans le but de faciliter la
vie du développeur. 

Cette arborescence est utilisée et respectée par les plugins, ce qui permet d'obtenir une architecture
claire et hautement modulaire. Voici une présentation des dossiers utilisés.

\code
* css/
	-	theme_ui/		Le théme de Jquery UI
* js/					Fichiers javascript, jquery et plugins
* images/				Images du kit graphique
* lib/					Librairies PHP et plugins
	-	smarty/			Gestionnaire de templates
	-	ipy/			Framework Ipy
* templates/			Gabarits servant à la présentation de la page
\endcode

Comme vous pouvez le voir, le dossier \b lib/ est l'emplacement prévu pour le développement des modules. Le module Nout (nout.php)
fourni une fonction d'<a href="">autoloading</a>. Lorsqu'un module est utilisé, il est chargé automatiquement.

Les plugins doivent suivre une structure précise - ils doivent se trouver dans un dossier, un fichier à leurs noms.
Ainsi, le plugin \em Seth devra se trouver dans le dossier \b lib/seth/seth.php.

\page commencer Par où commencer?

La premiére chose à faire, une fois le projet installé, est de créer un fichier \b index.php digne de ce nom!
C'est la partie la plus importante - la piére angulaire du futur website en cours de création. En effet, la configuration 
du module mod_rewrite redirige toute les pages vers le script \b index.php.

Une page \b index.php bien formée ressemble à ceci : 
\code
include("lib/ipy/ipy.php");

$tpl = new Smarty();
$ipy = new maat($tpl);

$ipy->route('', ':templates/home.tpl');
$ipy->route('home', ':templates/home.tpl');

$ipy->route('seth', ':templates/seth.tpl');

$ipy->index();
\endcode

Pour plus d'information sur la redirection d'URL, voire \ref maat.php "le module Maat"

Ensuite, il devient peut-être judicieux de composer une application, un module. Un wiki, un moteur de discussion, ... peuvent être des applications
AJAX facile à créer et à utiliser. Pour çela, créez le plugin dans le dossier \b lib/nom_du_plugin/nom_du_plugin.php. La façon la plus simple d'accéder à ce plugin
à partir du monde extérieur est de créer une fonction \b route(), et de lier les URL à ses propres fonctions.

Un plugin bien formé ressemblerais à çeci : 
\code
class seth {

	function __construct($ipy){
		$ipy->route('seth-login-hit', array($this, 'login_hit'));
		$ipy->route('seth-logout', array($this, 'logout'));
		$ipy->route('seth-login-box', ':seth/login_box.tpl');
	}
	//	L'utilisateur tente une connection
	function login_hit(){
		//	Vérifier en base de donnée que les données sont bonnes
		//	Afficher la réponse
		$ipy->tpl->display('templates/seth/response.tpl')
	}
	//	L'utilisateur se déconnecte
	function logout(){
	
	}
	//	L'utilisateur a-t-il le droit d'aller sur cette page?
	function right($admin){
	
	}

};\endcode

**/
 
require ("lib/smarty/Smarty.class.php");

require ("maat.php");
require ("nout.php");